const path = require('path')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const CompressionWebpackPlugin = require('compression-webpack-plugin')

const productionGzipExtensions = ['js', 'css']

const resolve = dir => {
  return path.join(__dirname, dir)
}

// 获取 node命令的模式 去掉前两位参数信息
const rawArgv = process.argv.slice(2)

// 开发 打包 注意 test:e2e 模式 走 build 模式
const NODE_ENV = rawArgv[0] === 'build' ? 'production' : 'development'

// 设置环境
process.env.NODE_ENV = NODE_ENV

// is production
const IS_PROD = process.env.NODE_ENV === 'production'

console.log('')
console.log('\x1B[35m%s\x1B[39m', '项目配置信息')
console.log('\x1B[35m%s\x1B[39m', 'NODE_ENV= ' + process.env.NODE_ENV)
console.log('\x1B[35m%s\x1B[39m', 'IS_PROD= ' + IS_PROD)
console.log('\x1B[35m%s\x1B[39m', 'OUT_PUT_DIR= ' + process.env.VUE_APP_OUT_PUT_DIR)
console.log('\x1B[35m%s\x1B[39m', 'VUE_APP_PROXY_BASEURL= ' + process.env.VUE_APP_PROXY_BASEURL)
console.log('\x1B[35m%s\x1B[39m', 'api= ' + process.env.VUE_APP_BASEURL)

module.exports = {
  publicPath: IS_PROD ? './' : '/', // 线上打包路径，请根据项目实际线上情况
  outputDir: 'dist/' + process.env.VUE_APP_OUT_PUT_DIR || 'dist', // 打包生成的生产环境构建文件的目录
  assetsDir: process.env.assetsDir || 'static', // 放置生成的静态资源路径，默认在outputDir
  indexPath: 'index.html', // 指定生成的 index.html 输入路径，默认outputDir
  pages: undefined, // 构建多页
  // lintOnSave: true, // 是否开启eslint保存检测，有效值：ture | false | 'error'
  lintOnSave: false, 
  productionSourceMap: false, // 开启 生产环境的 source map?
  // runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
  chainWebpack: config => {
    // 配置路径别名
    config.resolve.alias
      .set('@', resolve('src'))
    // 移除 prefetch 插件
    config.plugins.delete('prefetch')
    // 移除 preload 插件
    config.plugins.delete('preload')
    // 压缩代码
    config.optimization.minimize(true)
    // 分割代码
    config.optimization.splitChunks({
      chunks: 'all'
    })
  },
  configureWebpack: config => {
    if (IS_PROD) {
      config.plugins.push(new CompressionWebpackPlugin({
        algorithm: 'gzip',
        test: new RegExp(`\\.(${productionGzipExtensions.join('|')})$`),
        threshold: 10240,
        minRatio: 0.8
      }))
      config.plugins.push(
        new UglifyJsPlugin({
          uglifyOptions: {
            compress: {
              // warnings: false,
              drop_debugger: true, // console
              drop_console: true,
              pure_funcs: ['console.log'] // 移除console
            }
          },
          sourceMap: false,
          parallel: true
        })
      )
    }
  },
  css: {
    modules: false, // 启用 CSS modules
    extract: true, // 是否使用css分离插件 true style 和 文件的css less sass 文件不能自动更新
    sourceMap: false, // 开启 CSS source maps?
    loaderOptions: {} // css预设器配置项
  },
  devServer: {
    // overlay 同时显示警告和错误
    overlay: {
      warnings: true,
      errors: true
    },
    compress: false, // 开启压缩
    open: false, // 配置自动启动浏览器
    hotOnly: true, // 热更新
    port: 8081, // 端口
    // proxy: '' // Type: string | Object 设置代理
    proxy: {
      '/api': {
        target: process.env.VUE_APP_PROXY_BASEURL || '',
        changeOrigin: true
      }
    }
  }
}
